14a7bfa3c9333472d623f9f27132c0cdad45a934,src/java/org/orbeon/oxf/xforms/control/controls/XFormsSelectControl.java,XFormsSelectControl,storeExternalValue,#PipelineContext#String#String#,49

Before Change


                if (!itemWasSelected && itemIsSelected)
                    selectEvents.add(new XFormsSelectEvent(this, currentItemValue));
                else if (itemWasSelected && !itemIsSelected)
                    containingDocument.dispatchEvent(pipelineContext, new XFormsDeselectEvent(this, currentItemValue));
            }
            if (selectEvents.size() > 0) {
                // Select events must be sent after all xforms-deselect events

After Change



            // Iterate over all the items
            final List selectEvents = new ArrayList();
            final List deselectEvents = new ArrayList();
            for (Iterator i = items.iterator(); i.hasNext();) {
                final XFormsItemUtils.Item currentItem = (XFormsItemUtils.Item) i.next();
                final String currentItemValue = currentItem.getValue();
                final boolean itemWasSelected = instanceValues.get(currentItemValue) != null;
                final boolean itemIsSelected;
                if (uiValues.get(currentItemValue) != null) {
                    // Value is currently selected in the UI
                    instanceValues.put(currentItemValue, "");
                    itemIsSelected = true;
                } else {
                    // Value is currently NOT selected in the UI
                    instanceValues.remove(currentItemValue);
                    itemIsSelected = false;
                }

                // Handle xforms-select / xforms-deselect
                // TODO: Dispatch to itemset or item once we support doing that
                if (!itemWasSelected && itemIsSelected) {
                    selectEvents.add(new XFormsSelectEvent(this, currentItemValue));
                } else if (itemWasSelected && !itemIsSelected) {
                    deselectEvents.add(new XFormsDeselectEvent(this, currentItemValue));
                }

            }
            // Dispatch xforms-deselect events
            if (deselectEvents.size() > 0) {
                for (Iterator i = deselectEvents.iterator(); i.hasNext();) {
                    containingDocument.dispatchEvent(pipelineContext, (XFormsEvent) i.next());
                }
            }
            // Select events must be sent after all xforms-deselect events